package src.E_Thread;

// 方式二，实现Runnable接口创建线程，重写run()方法，调用start开启线程
// 推荐使用这种方式，可以避免单继承的局限性，灵活方便同一个对象被多个线程使用
public class E02_CreateThread_Runnable implements Runnable{
    // run线程
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("run线程 "+i);
        }
    }

    // main线程，主线程
    public static void main(String[] args) {
        // 创建接口的实现类对象
        E02_CreateThread_Runnable thread_runnable = new E02_CreateThread_Runnable();
        thread_runnable.run(); // 这里相当于调用了一个普通方法，并没有开启线程！所以代码还是按照顺序执行
        // 创建线程对象，通过线程对象来开启线程（静态代理模式，Thread为代理者，thread_runnable为真实对象，详情参考E06）
        new Thread(thread_runnable).start(); // 调用start()方法开启线程，这里才算开启线程！与main主线程并行

        // 两条线程同时进行，由cpu调度执行，不可人为干预
        for (int i = 0; i < 100; i++) {
            System.out.println("主线程 "+i);
        }
    }
}
